//
//  LspNbStatusListViewModel.swift
//  LspSwiftFinayTest
//
//  Created by lsp's mac pro on 2018/4/17.
//  Copyright © 2018年 lsp's mac pro. All rights reserved.
//

//微博数据列表视图模型
/*
 父类的选择
 -如果类需要使用KVC或者字典转模型框架设置对象值，类就需要继承自NSObject
 -如果类只是包装了一些代码逻辑（写了一些函数），可以不用任何父类 好处：更加轻量级
 -提示：如果用OC写 ，一律都继承于NSObject 即可
 */
import Foundation

class LspNbStatusListViewModel{
    
    /// completion 网络请求是否成功
    lazy var statusList = [LspNbStatus]()
    private let maxPullUpTimes = 3 //总共允许失败的次数
    private var everyErrorTimes = 0 //每次失败后用这个参数去记录
    
    
    
    ///
    /// - Parameters:
    ///   - pullup: 是否上拉刷新
    
    func loadStatus(pullup:Bool, completion:@escaping (_ isSuccess:Bool,_ haveMorePullUp:Bool)->()) {
       let since_id = pullup ? 0:(statusList.first?.id ?? 0)//这里有弊端的 万一人家不是按0 1 2 3 这种的 怎么办
        let max_id = !pullup ? 0:(statusList.last?.id ?? 0)
        
        LspNbNetWorkManage.shared.statusList(since_id: since_id,max_id: max_id) { (list, isSuccess) in
            
            //如果是上拉刷新并且没拿到参数的次数等于最大评估测试次数 那么就停止请求
            if pullup && self.everyErrorTimes > self.maxPullUpTimes{
                
                completion(isSuccess,false)
                return
            }
            
            
            //字典转模型 guard let 守护
            guard let array = NSArray.yy_modelArray(with: LspNbStatus.self , json: list ?? []) as? [LspNbStatus] else{
                completion(isSuccess,false)
                return
            }
            if pullup {
               self.statusList+=array
            }else{
              self.statusList = array + self.statusList
            }
            
            if pullup && array.count == 0{
                self.everyErrorTimes+=1
              completion(isSuccess,false)
            }else{
              completion(isSuccess,true)
            }
            
            
        }
    }
    
    
}



